﻿#pragma once

#include "geom_base.h"

namespace CAGD
{

/**
 * 几何向量.
 */
template <int Dim> class GeomVectorDim : public GeomBase
{
  public:
    /**
     * @brief 点构造.
     * @param point
     * @see
     */
    GeomVectorDim(const BVecN<Dim> &vec) : m_vec(vec)
    {
    }

    /**
     * @brief 常量引用.
     * @return
     * @see
     */
    const BVecN<Dim> &Vector() const
    {
        return m_vec;
    }

    /**
     * @brief 修改点.
     * @param p
     * @see
     */
    void SetVector(const BVecN<Dim> &v)
    {
        m_vec = v;
    }

    /**
     * @brief 返回类型.
     * @return
     * @see
     */
    GeomType Type() const override
    {
        return GeomType::VECTOR;
    }

  protected:
    BVecN<Dim> m_vec;
};

using GeomVector = GeomVectorDim<3>;
using Geom2dVector = GeomVectorDim<2>;

} // namespace CAGD
